/// 泛型是表示一种不确定的类型，需要在编译器或运行期（编译器决定）来确定具体类型的语法
#[cfg(test)]
mod test {
    // =======泛型在结构体中的应用========
    struct MyStruct<T>(T);

    struct MyStruct1<T> {
        _name: T,
    }

    #[test]
    /// 结构体泛型
    fn test1() {
        // 单元结构体泛型
        let _ = MyStruct(5);
        // 结构体泛型
        let _ = MyStruct1 { _name: "1" };
    }
    
    // =======泛型在函数中的应用========
    trait Sheep {
        fn get_name(&self) -> &str;
    }

    struct Goat {
        name: &'static str,
    }

    impl Sheep for Goat {
        fn get_name(&self) -> &str {
            self.name
        }
    }

    fn f1<T: Sheep>(t: &T) {
        println!("{}", t.get_name());
    }

    fn f2<T>(t: &T)
    where
        T: Sheep,
    {
        println!("{}", t.get_name());
    }

    #[test]
    fn test2() {
        let goat = Goat { name: "1" };
        f1(&goat);
        f2(&goat);
    }

    
    
}
